Computer virtualization is a technique that involves encapsulating a physical computing machine platform into virtual machine(s) executing under control of virtualization software on a hardware computing platform or “host.” A virtual machine provides virtual hardware abstractions for processor, memory, storage, and the like to a guest operating system. The virtualization software, also referred to as a “hypervisor,” includes one or more virtual machine monitors (VMMs) to provide execution environment(s) for the virtual machine(s). As physical hosts have grown larger, with greater processor core counts and terabyte memory sizes, virtualization has become key to the economic utilization of available hardware.
Virtual machines provide hardware-level virtualization. Another virtualization technique is operating system-level (OS-level) virtualization, known as a “container,” where an abstraction layer is configured using the kernel of an operating system executing on a host computing system. A container runs as an isolated process in user-space on the host operating system (referred to as the “container host”) and shares the kernel with other containers. A container relies on the kernel's functionality in order to run applications therewithin with certain resource constraints (e.g, a certain amount of memory or processing time) and isolation.
Host computing systems on which VMs are running may be configured to operate with one or more peripheral devices. Such devices may include, for example, input devices (e.g., a keyboard, a mouse, a graphic tablet, a touch screen, an image scanner, a microphone, a webcam, and a barcode reader), output devices (e.g., a display device, a printer, and a graphical output device), storage devices (e.g., an external hard drive, an LTO drive, a flash drive/solid-state drive, a disk drive commonly within a hard drive enclosure, a smartphone or tablet computer storage interface, a CD-ROM drive, and a DVD-ROM drive) and input and output devices (e.g., a modem and a network interface controller). Each such peripheral device requires host computing system resources, such as processor (CPU) time, input/output (I/O) bandwidth on the various data buses, and physical memory space.
Typically, when a peripheral device is attached to a host computing system, the peripheral device is not available to VMs that are configured to run on a different host computing system in the cluster. In addition, if containers are configured to run within the VMs, such containers will also not be able to access the peripheral device.